package br.com.casablanca.viewbean;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import br.com.casablanca.dto.CondominioDTO;
import br.com.casablanca.exception.RegraNegocioException;
import br.com.casablanca.services.CondominioService;
import br.com.casablanca.utils.CasablancaUtils;
import br.com.casablanca.utils.Constants;


public class CondominioBean {  
	private CondominioDTO condominio;
	private List<CondominioDTO> condominios;
	private String filtroNome = "";
	
	public String listar() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			filtroNome = "";
			
			this.condominios = new CondominioService().listar();
			if(CasablancaUtils.isNullOrEmpty(this.condominios)){
				FacesMessage msg = new FacesMessage(Constants.MSG_NENHUM_REGISTRO);
				msg.setSeverity(FacesMessage.SEVERITY_INFO);
				context.addMessage(null, msg);
				this.condominios = null;
			}
		} catch (RegraNegocioException e) {
			context.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
		} catch (Exception e) {
			return CasablancaUtils.trataErro(context, e);
		}
		return "listaCondominio";
	}

	public String limpar() {
		
		if(condominio != null && condominio.getId() != null){
			Long id = new Long(condominio.getId());
			condominio = new CondominioDTO();
			condominio.setId(id);
		} else {
			condominio = new CondominioDTO();
		}
		return "cadastroCondominio";
	}

	public String salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			new CondominioService().incluir(condominio);
			condominio = new CondominioDTO();
			FacesMessage msg = new FacesMessage(Constants.MSG_INCLUIR_SUCESSO);
			msg.setSeverity(FacesMessage.SEVERITY_INFO);
			context.addMessage(null, msg);
		} catch (RegraNegocioException e) {
			context.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
			condominio.setId(null);
		} catch (Exception e) {
			return CasablancaUtils.trataErro(context, e);
		}
		return "cadastroCondominio";
	}
	
	public String excluir() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			new CondominioService().excluir(this.condominio);
			this.condominio = null;
			FacesMessage msg = new FacesMessage(Constants.MSG_EXCLUSAO_SUCESSO);
			msg.setSeverity(FacesMessage.SEVERITY_INFO);
			context.addMessage(null, msg);
			
			this.condominios = new CondominioService().listar();
			
			if(this.condominios == null || this.condominios.isEmpty()){
				msg = new FacesMessage(Constants.MSG_NENHUM_REGISTRO);
				msg.setSeverity(FacesMessage.SEVERITY_INFO);
				context.addMessage(null, msg);
			}

		} catch (RegraNegocioException e) {
			context.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
		} catch (Exception e) {
			e.printStackTrace();
			FacesMessage msg = new FacesMessage("Erro inesperado!");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			context.addMessage(null, msg);
		}

		return "listaCondominio";
	}

	public String alterar() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			new CondominioService().alterar(condominio);
			FacesMessage msg = new FacesMessage(Constants.MSG_ALTERAR_SUCESSO);
			msg.setSeverity(FacesMessage.SEVERITY_INFO);
			context.addMessage(null, msg);
		} catch (RegraNegocioException e) {
			context.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
		} catch (Exception e) {
			return CasablancaUtils.trataErro(context, e);
		}
		return "cadastroCondominio";
	}

	public void iniciar(ActionEvent event) {
		condominio = new CondominioDTO();
	}
	
	public CondominioDTO getCondominio() {
		return condominio;
	}
	public void setCondominio(CondominioDTO condominio) {
		this.condominio = condominio;
	}

	public List<CondominioDTO> getCondominios() {
		return condominios;
	}

	public void setCondominios(List<CondominioDTO> condominios) {
		this.condominios = condominios;
	}

	public String getFiltroNome() {
		return filtroNome;
	}

	public void setFiltroNome(String filtroNome) {
		this.filtroNome = filtroNome;
	}
	
}
